package scene

import (
	"clientDemo/ui/fyne_ui/common"
	"fmt"
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/dialog"
	"fyne.io/fyne/v2/layout"
	"fyne.io/fyne/v2/widget"
)

func (m *SceneModule) LoginScene(app fyne.App, mainWindow fyne.Window) fyne.Window {

	loginWindow := app.NewWindow("登录")

	// 设置窗口大小
	loginWindow.Resize(fyne.NewSize(float32(common.LoginGUIWidth), float32(common.LoginGUIHeight)))

	// 创建用户名和密码输入框
	username := widget.NewEntry()
	username.SetPlaceHolder("请输入用户名")

	password := widget.NewEntry()
	password.SetPlaceHolder("请输入密码")
	password.SetText("")     // 清空默认文本
	password.Password = true // 设置为密码模式

	// 创建登录按钮
	loginButton := widget.NewButton("登录", m.checkLogin(username, password, loginWindow, mainWindow, app))
	// 自定义按钮的样式
	loginButton.Resize(fyne.NewSize(100, 40)) // 设置按钮大小
	loginButton.Move(fyne.NewPos(100, 150))   // 设置按钮位置
	loginButton.Importance = widget.HighImportance

	// 使用容器调整按钮背景颜色
	buttonContainer := container.New(layout.NewCenterLayout(), loginButton)
	buttonContainer.Resize(fyne.NewSize(float32(common.LoginGUIWidth), 200)) // 设置容器最小大小

	// 创建布局
	grid := container.New(layout.NewGridLayout(2),
		widget.NewLabel("用户名："), username,
		widget.NewLabel("密码："), password,
	)
	// 创建一个空标签作为间距
	spacer := widget.NewLabel("")
	spacer.Resize(fyne.NewSize(0, 400))

	// 创建主容器
	content := container.New(layout.NewVBoxLayout(),
		spacer,
		grid,
		spacer,
		loginButton,
	)

	loginWindow.SetContent(content) // 设置主窗口内容
	loginWindow.CenterOnScreen()    // 居中窗口
	loginWindow.Show()
	return loginWindow
}

func (m *SceneModule) checkLogin(username *widget.Entry, password *widget.Entry, loginWindow, mainWindow fyne.Window, app fyne.App) func() {
	return func() {
		// 登录失败逻辑
		//dialog.NewConfirm("错误", "用户名或密码错误", func(confirmed bool) {
		//	if confirmed {
		//		// 用户点击了确认
		//	}
		//}, loginWindow).Show()
		//return
		if username.Text == "" || password.Text == "" {
			dialog.NewError(fmt.Errorf("用户名或密码不能为空"), loginWindow).Show()
			return
		}
		flag := m.loginModule.LoginService(username.Text, password.Text)
		if flag {
			m.loginModule.SaveLoginStatus()
			loginWindow.Hide() // 不能关闭 消息循环在这里
			mainWindow.Show()
		} else {
			// 登录失败逻辑
			dialog.NewError(fmt.Errorf("用户名或密码错误"), loginWindow).Show()
		}
	}
}
